﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Aquasoft.Iszr.Proxy.WebServices
{
    public static class StavEnumExtensions
    {
        public static StavType ToStav(this StavRppType stav)
        {
            switch (stav)
            {
                case StavRppType.spravny:
                    return StavType.spravny;
                case StavRppType.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }
        public static StavType ToStav(this AdresaStavTypeStav stav)
        {
            switch (stav)
            {
                case AdresaStavTypeStav.spravny:
                    return StavType.spravny;
                case AdresaStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this StatutarniOrganStavTypeStav stav)
        {
            switch (stav)
            {
                case StatutarniOrganStavTypeStav.spravny:
                    return StavType.spravny;
                case StatutarniOrganStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }
        public static StavType ToStav(this PravniFormaStavResponseTypeStav stav)
        {
            switch (stav)
            {
                case PravniFormaStavResponseTypeStav.spravny:
                    return StavType.spravny;
                case PravniFormaStavResponseTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this PravniStavStavResponseTypeStav stav)
        {
            switch (stav)
            {
                case PravniStavStavResponseTypeStav.spravny:
                    return StavType.spravny;
                case PravniStavStavResponseTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this NazevOsobyStavTypeStav stav)
        {
            switch (stav)
            {
                case NazevOsobyStavTypeStav.spravny:
                    return StavType.spravny;
                case NazevOsobyStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this StavRosType stav)
        {
            switch (stav)
            {
                case StavRosType.spravny:
                    return StavType.spravny;
                case StavRosType.nespravny:
                    return StavType.nespravny;
                case StavRosType.nedefinovany:
                    return StavType.nedefinovany;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this FoStavTypeStav stav)
        {
            switch (stav)
            {
                case FoStavTypeStav.spravny:
                    return StavType.spravny;
                case FoStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this DatovaSchrankaStavTypeStav stav)
        {
            switch (stav)
            {
                case DatovaSchrankaStavTypeStav.spravny:
                    return StavType.spravny;
                case DatovaSchrankaStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this DatumZahajeniCinnostiStavTypeStav stav)
        {
            switch (stav)
            {
                case DatumZahajeniCinnostiStavTypeStav.spravny:
                    return StavType.spravny;
                case DatumZahajeniCinnostiStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this DatumUkonceniCinnostiStavTypeStav stav)
        {
            switch (stav)
            {
                case DatumUkonceniCinnostiStavTypeStav.spravny:
                    return StavType.spravny;
                case DatumUkonceniCinnostiStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this KodPravniFormyStavTypeStav stav)
        {
            switch (stav)
            {
                case KodPravniFormyStavTypeStav.spravny:
                    return StavType.spravny;
                case KodPravniFormyStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this DatumVznikuOpravneniStavTypeStav stav)
        {
            switch (stav)
            {
                case DatumVznikuOpravneniStavTypeStav.spravny:
                    return StavType.spravny;
                case DatumVznikuOpravneniStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this DatumZanikuOpravneniStavTypeStav stav)
        {
            switch (stav)
            {
                case DatumZanikuOpravneniStavTypeStav.spravny:
                    return StavType.spravny;
                case DatumZanikuOpravneniStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        public static StavType ToStav(this KodPravnihoStavuStavTypeStav stav)
        {
            switch (stav)
            {
                case KodPravnihoStavuStavTypeStav.spravny:
                    return StavType.spravny;
                case KodPravnihoStavuStavTypeStav.nespravny:
                    return StavType.nespravny;
                default:
                    throw new NotSupportedException();
            }
        }

        //pouze pro jednodussi "generovani"
        internal static StavType ToStav(StavType stav)
        {
            return stav;
        }

        public static StavType? ToStav(this StavRppType? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this AdresaStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this StatutarniOrganStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this PravniFormaStavResponseTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this PravniStavStavResponseTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this NazevOsobyStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this StavRosType? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this FoStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this DatovaSchrankaStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this DatumZahajeniCinnostiStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this DatumUkonceniCinnostiStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this KodPravniFormyStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this DatumVznikuOpravneniStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this DatumZanikuOpravneniStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

        public static StavType? ToStav(this KodPravnihoStavuStavTypeStav? stav)
        {
            if (stav == null) return null;
            return stav.Value.ToStav();
        }

    }
}
